#+title: Notes

* Digital rain
** DONE Slowly increasing amount of "worms"
** DONE Add speed optimization for release version
** DONE try color gradient
** DONE better gradient (from shades of green)
** DONE somehow need to slower rotation of worms characters
** DONE different first character rotation for worms
** DONE calculate average fps, print it after execution
** DONE raname Matrix to DigitalRain
** DONE rename charworm into raindrops
** DONE remove ndarray from digital rain
** DONE rain drop should return list of characters with colors
** DONE even better gradient (2 steps from white to dark gray)
** DONE move "map" (with position of worms with worm_id) into separate module,
map completely removed
** DONE builder pattern for rain drops
** DONE store options as MatrixOptions
** DONE keep fps stable and above some value - 20, 30, 60?
** DONE inconsistency between buffer.rs coordinates and crossterm screen started from 1, 1
** TODO zbuffer for different worm positions
** TODO general interface to run screen-savers
** TODO make drops sometimes fade away
** TODO match gradient calculation with body length
** TODO update screen size (h/w) during execution (currently doesn't track it)
** TODO still something strange with coordinates, looks like there are no drops when y = 0
** DONE fix digital rain benchmarks
** DONE derive_builder for DigitalRainOptions

* Convay's Life
** basic implementation
- [X] data structure
- [X] rules
- [X] initial state

* https://en.wikipedia.org/wiki/Schelling%27s_model_of_segregation


* Optimizations
** DONE fx in RainDrop could be u16 or usize
** DONE clamp coordinates to make sure they fit the screen
** DONE update crossterm
** DONE SPEED_RANGE as interval type
** DONE implement buffer to keep only differences
** DONE need to minimize amount of clean cells commands
on next frame not all cell should be cleaned
